package com.example.learn.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.example.learn.pojo.Token;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JWTUtils {

    //过期时间设置(30分钟)
    private static final long EXPIRE_TIME = 30*60*1000;

    //私钥设置(随便乱写的)
    private static final String TOKEN_SECRET = "5xcJVrXNyQDIxK1l2RS9nw";

    public String getToken(Map<String, String> map){

        //过期时间和加密算法设置
        Date date = new Date(System.currentTimeMillis()+EXPIRE_TIME);
        Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);

        //头部信息
        Map<String,Object> header = new HashMap<>(2);
        header.put("typ","JWT");
        header.put("alg","HS256");

        JWTCreator.Builder builder =  JWT.create();
        builder.withHeader(header);

        map.forEach((k, v) -> {
            builder.withClaim(k,v);
        });

        String token = builder.withExpiresAt(date).sign(algorithm);
        return token;
    }

//    根据token和key获取对应值
    public String getTokenValueByKey(String token, String key){
        DecodedJWT jwt = JWT.decode(token);
        return jwt.getClaim(key).asString();
    }

//    public String creatToken(String openid,String role){
//        //这里是传入的是token对象，决定token的内容
//        Token tk=new Token();
//        //获取时间用
//        Date date=new Date();
//
//        tk.setOpenId(openid);
//        tk.setRole(role);
//        tk.setLastLogin(date);
//        //交给上面的实现类得到token
//        return getToken(tk);
//    }
//
//    public String getTokenDataOpenId(String token){
//        return JWT.decode(token).getClaim("openId").asString();
//    }

    /*
    * 验证token 合法性
    * */
    public static void vertify(String token){
        JWT.require(Algorithm.HMAC256(TOKEN_SECRET)).build().verify(token);
    }
}
